#pragma once
#include "UltimateSubsystemRegistryPrecompiled.h"
#include "UltimateSubsystemRegistryPrerequisites.h"
#include "UltimateSubsystem.h"

#define PHYSICS_SUBSYSTEM "physics"
#define INPUT_SUBSYSTEM "input"
#define GUI_SUBSYSTEM "gui"
#define SOUND_SUBSYSTEM "sound"
#define NETWORK_SUBSYSTEM "network"


class _UltimateSubsystemRegistryExport UltimateSubsystemRegistry:
		public Ogre::Singleton<UltimateSubsystemRegistry>
	{
		std::map<Ogre::String, UltimateSubsystem*> subsystemMap;

	public:

		

		static UltimateSubsystemRegistry& getSingleton(void);
		static UltimateSubsystemRegistry* getSingletonPtr(void);

		void addSubsystem(UltimateSubsystem* subsystem);
		void removeSubsystem(Ogre::String subsystemName);

		UltimateSubsystem * getSubsystem(Ogre::String subsystemName);

		UltimateSubsystemRegistry(void);
		~UltimateSubsystemRegistry(void);


	};

